#! python
# -*- coding: UTF-8 -*-
"""
@Project ：ai-demo 
@File    ：ant.py
@IDE     ：PyCharm 
@Author  ：zhangyiheng
@Date    ：2025/4/1 12:04 
@Describe：ASR、NLP、TTS
"""
import os

from funasr import AutoModel
from modelscope import pipeline, Tasks
from modelscope.outputs import OutputKeys

path_prefix = "/Users/zhangzhan/Desktop/zhangzhan/modelscopes/repository-c"

# 初始化中文语音识别模型   ASR
model_zh = AutoModel(
    # 主ASR模型配置（Paraformer语音识别-中文-通用-16k-离线-large-长音频版）
    model=f"{path_prefix}/iic/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch",
    model_revision="v2.0.5",  # 模型版本号

    # 语音活动检测(VAD)模型配置 （FSMN语音端点检测-中文-通用-16k）
    vad_model=f"{path_prefix}/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch",
    vad_model_revision="v2.0.4",  # VAD模型版本
    # vad_kwargs={"max_single_segment_time": 60000},  # 可选：VAD高级参数（单位毫秒）

    # 标点恢复模型配置 （CT-Transformer标点-中文-通用-pytorch）
    punc_model=f"{path_prefix}/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch",
    punc_model_revision="v2.0.4",  # 标点模型版本

    # 模型更新控制
    disable_update=True,  # 禁用模型自动更新
    force_download=False,  # 不强制重新下载模型
    resume_download=False,  # 不启用断点续传下载

    # 缓存和路径配置
    cache_dir=path_prefix,  # 指定模型缓存根目录（默认~/.cache）

    # device="cuda:0",  # 手动指定计算设备

    # 高级功能（以下为可选配置）
    # spk_model="cam++",  # 说话人分离模型（需额外下载）
    # spk_model_revision="v2.0.2",

    # quantize=True,  # 是否启用量化加速（需模型支持）

    # 推理参数（可在generate()时覆盖）
    # batch_size_s=300,  # 批处理大小（秒为单位）
    # hotword="阿里云",  # 热词增强（提升特定词汇识别率）
)




text = '待合成文本'
sambert_hifigan_tts = pipeline(task=Tasks.text_to_speech,
                               model=f"{path_prefix}/iic/speech_sambert-hifigan_tts_zh-cn_16k")
output = sambert_hifigan_tts(input=text, voice='zhitian_emo')
wav = output[OutputKeys.OUTPUT_WAV]
with open('output.wav', 'wb') as f:
    f.write(wav)





def test_asr_zh(audio_path):
    """
    测试中文语音识别功能
    :param audio_path: 音频文件路径（支持.wav/.mp3等格式）
    """
    try:
        # 检查音频文件是否存在
        if not os.path.exists(audio_path):
            raise FileNotFoundError(f"音频文件不存在: {audio_path}")

        print(f"\n开始处理音频: {audio_path}")

        # 执行语音识别
        result = model_zh.generate(input=audio_path)

        # 打印原始结果
        print("\n原始识别结果:")
        print(result)

        # 提取文本结果（FunASR返回结果可能是列表或字典）
        if isinstance(result, list) and len(result) > 0:
            text = result[0].get("text", "未识别到文本")
            if isinstance(text, list):
                text = " ".join(text)
        elif isinstance(result, dict):
            text = result.get("text", "未识别到文本")
        else:
            text = str(result)

        # print("\n识别文本:")
        # print(text)

        return text

    except Exception as e:
        print(f"识别失败: {str(e)}")
        return None


if __name__ == "__main__":
    # 测试用例
    test_audio = "/Users/zhangzhan/Desktop/zhangzhan/modelscopes/vad_example.wav"  # 替换为你的测试音频路径

    # 执行测试
    recognized_text = test_asr_zh(test_audio)

    # 验证输出
    if recognized_text:
        print("\n测试成功！")
        print("最终识别结果:", recognized_text)
    else:
        print("\n测试失败！")
